package br.com.pnfp.web.model.dao.mysql;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;

import br.com.pnfp.web.model.dao.ICidadeDAO;
import br.com.pnfp.web.model.enums.UF;
import br.com.pnfp.web.model.vo.Cidade;

@Repository
public class CidadeDAO extends DAO implements ICidadeDAO {

	@Override
	public List<Cidade> consultar(Cidade vo) {

		String sql = "SELECT cd_cidade, nm_cidade, sg_uf FROM tb_cidade where ";
		Object[] params = {};
		if(vo.getCodigo() != null) {
			sql += "cd_cidade = ? ";
			params = new Object[]{vo.getCodigo()};
		} else if(vo.getUf() != null) {
				sql += "sg_uf = ?";
				params = new Object[]{vo.getUf().name()};
		} else {
			sql += "nm_cidade like ? ";
			String desc = "%";
			if(vo.getNome() != null && !vo.getNome().equals("")) {
				desc = vo.getNome() + "%";
			}
			params = new Object[]{desc};
		} 
		sql += " order by nm_cidade, sg_uf";

		List<Cidade> result = query(sql, params, new RowMapper<Cidade>() {
			@Override
			public Cidade mapRow(ResultSet rs, int arg1) throws SQLException {
				Cidade vo = new Cidade();
				vo.setCodigo(rs.getInt("cd_cidade"));
				vo.setNome(rs.getString("nm_cidade"));
				vo.setUf(UF.valueOf(rs.getString("sg_uf")));
				return vo;
			}
			
		});		
		
		return result;
	}
	
	@Override
	public void incluir(Cidade vo) {
		String sql = "INSERT INTO tb_cidade(nm_cidade, sg_uf) values(?,?)";
		update(sql, new Object[] {vo.getNome(), vo.getUf().name()});
	}
	
	@Override
	public void alterar(Cidade vo) {
		String sql = "UPDATE tb_cidade set nm_cidade = ?, sg_uf = ? where cd_cidade = ?";
		update(sql, new Object[] {vo.getNome(), vo.getUf().name(), vo.getCodigo()});
	}

}
